# ————————————————————  6.3.1位置传递  ————————————————————
def test_param(a, b, c):
    print(a, b, c)
test_param(1, 2, 3)     # 调用函数，根据位置传递参数


# ————————————————————  6.3.2关键字传递  ————————————————————
# def test_param(a, b, c):
#     print(a, b, c)
# test_param(a=1, c=3, b=2)     # 调用函数，根据关键字传递参数


# ————————————————————  多学一招：仅限位置和仅限关键字  ————————————————————
# def test_param(a, b, /, c):   # 定义函数，部分参数遵守仅限位置的要求
#     print(a, b, c)
# test_param(1, 2, 3)
# test_param(1, 2, c=3)


# def test_param(a, *, b, c):   # 定义函数，部分参数遵守仅限关键字的要求
#     print(a, b, c)
# test_param(1, b=2, c=3)
# test_param(a=1, b=2, c=3)


# ————————————————————  6.3.3参数默认值  ————————————————————
# def test_param(a, b, c=6):    # 定义函数，形参c有默认值
#     print(a, b, c)
# test_param(1, 2, 3)            # 调用函数，给形参c传值
# test_param(1, 2)                # 调用函数，不给形参c传值


# ————————————————————  6.3.4包裹传递  ————————————————————
# def test_param(*args):    # 定义函数，该函数有一个加*的形参
#     print(args)
# test_param(1, 2, 3, 4, 5)

# def test_param(**kwargs):    # 定义函数，该函数有一个加**的形参
#     print(kwargs)
# test_param(a=1, b=2, c=3, d=4, e=5)


# ————————————————————  6.3.5解包裹传递  ————————————————————
# def test_param(a, b, c):
#     print(a, b, c)
# tuple_demo = (1, 2, 3)
# test_param(*tuple_demo)    # 调用函数，使用*对实参解包裹

# dict_demo = {'a': 1, 'b': 2, 'c': 3}
# test_param(**dict_demo)    # 调用函数，使用**对实参解包裹


# ————————————————————  6.3.6混合传递  ————————————————————
# def test_param(a, b, c=33, *args, **kwargs):
#     print(a, b, c, args, kwargs)
# test_param(1, 2)
# test_param(1, 2, c=3)
# test_param(1, 2, 3, 'a', 'b')
# test_param(1, 2, 3, 'a', 'b', x=99)
